package com.system.service;

import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageInfo;
import com.system.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.entity.TeacherRole;
import com.system.response.Result;
import com.system.response.role.RoleDtoResponse;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author zfc
 * @since 2023-04-20
 */
public interface RoleService extends IService<Role> {
    /**
     * 根据用户名查询该用户的角色
     * @param username
     * @return
     */
    Set<String> selectAllRoleNamesByUsername(String username);

    /**
     * 新增角色
     * @param role
     * @return
     */
    boolean addRole(Role role);

    /**
     * 彻底删除角色通过角色编号
     * @param id
     * @return
     */
    boolean completelyDeleteRoleById(Integer id);

    /**
     * 修改角色
     * @param role
     * @return
     */
    boolean updateRole(Role role);

    /**
     * 分页查询角色
     * @param roleResponse
     * @return
     */
    PageInfo<Role> roleLimit(RoleDtoResponse roleResponse);

    /**
     * 通过角色id查询角色信息
     * @param id
     * @return
     */
    Role selectRoleById(Integer id);

    /**
     * 查询所有角色
     * @return
     */
    List<Role> selectAllRole();

    /**
     * 检查角色是否存在
     * @param role
     * @return
     */
    boolean checkRoleUnique(Role role);

    /**
     * 检查角色名字是否存在，是原名称则返回false
     * @param role
     * @return
     */
    boolean checkRoleNameIsOneself(Role role);

    /**
     * ------------------------------------教师 - 关联 - 角色-----------------------------------------------
     */

    /**
     * 通过教师编号查询教师已绑定角色
     * @param teacherId
     * @return
     */
    Set<Role> queryTeacherBoundRoles(Integer teacherId);

    /**
     * 教师批量绑定角色，也可以只绑定一个
     * @param teacherId
     * @param roleIds
     * @return
     */
    Result teacherBoundRoles(Integer teacherId, Integer [] roleIds);


    /**
     * 检查是否有教师（用户）绑定角色
     * true:不为空
     * false：为空
     * @param tr
     * @return
     */
    boolean checkTeacherBoundRoles(TeacherRole tr);
}
